﻿package com.amcharts.chartClasses
{
    import com.amcharts.utils.*;
    import mx.collections.*;

    public class DataParser extends Object
    {
        private var _chartDataProvider:ArrayCollection;
        private var _firstDateOfWeek:Number;
        private var _periodCount:Number;
        private var _categoryField:String;
        private var _seriesIdField:String;
        private var _cleanPeriod:String;
        private var _charts:Array;
        private var _lookupTable:Object;
        private var _minPeriod:String;
        static const VERSION:String = "1.8.3.1";

        public function DataParser()
        {
            return;
        }// end function

        private function processFields(param1:AmGraph, param2:GraphDataItem, param3:Object) : void
        {
            var _loc_13:Array = null;
            var _loc_14:Number = NaN;
            if (param1.itemColors)
            {
                _loc_13 = param1.itemColors;
                _loc_14 = param2.index;
                if (_loc_14 < _loc_13.length)
                {
                    param2.color = _loc_13[_loc_14];
                }
                else
                {
                    param2.color = Math.round(Math.random() * 16777215);
                }
            }
            var _loc_4:* = param1.colorField;
            if (_loc_4)
            {
                if (param3.hasOwnProperty(_loc_4))
                {
                    param2.color = Utils.toColor(param3[_loc_4]);
                }
            }
            var _loc_5:* = param1.alphaField;
            if (_loc_5)
            {
                if (param3.hasOwnProperty(_loc_5))
                {
                    param2.alpha = param3[_loc_5];
                }
            }
            var _loc_6:* = param1.fillColorsField;
            if (_loc_6)
            {
                if (param3.hasOwnProperty(_loc_6))
                {
                    param2.fillColors = param3[_loc_6];
                }
            }
            var _loc_7:* = param1.descriptionField;
            if (_loc_7)
            {
                if (param3.hasOwnProperty(_loc_7))
                {
                    param2.description = param3[_loc_7];
                }
            }
            var _loc_8:* = param1.bulletField;
            if (_loc_8)
            {
                if (param3.hasOwnProperty(_loc_8))
                {
                    param2.bullet = param3[_loc_8];
                }
            }
            var _loc_9:* = param1.customBulletField;
            if (_loc_9)
            {
                if (param3.hasOwnProperty(_loc_9))
                {
                    param2.customBullet = param3[_loc_9];
                }
            }
            var _loc_10:* = param1.bulletSizeField;
            if (_loc_10)
            {
                if (param3.hasOwnProperty(_loc_10))
                {
                    param2.bulletSize = param3[_loc_10];
                }
            }
            var _loc_11:* = param1.bulletConfigField;
            if (_loc_11)
            {
                if (param3.hasOwnProperty(_loc_11))
                {
                    param2.bulletConfig = param3[_loc_11];
                }
            }
            var _loc_12:* = param1.urlField;
            if (_loc_12)
            {
                if (param3.hasOwnProperty(_loc_12))
                {
                    param2.url = param3[_loc_12];
                }
            }
            param2.dataContext = param3;
            return;
        }// end function

        public function get lookupTable() : Object
        {
            return _lookupTable;
        }// end function

        public function createSerialDataItem(param1:Object, param2:AmGraph = null) : SerialDataItem
        {
            var _loc_8:AmCoordinateChart = null;
            var _loc_9:String = null;
            var _loc_10:Array = null;
            var _loc_11:uint = 0;
            var _loc_12:uint = 0;
            var _loc_13:String = null;
            var _loc_14:Array = null;
            var _loc_15:uint = 0;
            var _loc_16:uint = 0;
            var _loc_17:AmGraph = null;
            var _loc_18:String = null;
            var _loc_19:GraphDataItem = null;
            var _loc_20:Object = null;
            var _loc_21:String = null;
            var _loc_3:* = new SerialDataItem();
            var _loc_4:* = param1[_categoryField];
            var _loc_5:* = String(param1[_seriesIdField]);
            _lookupTable[_loc_5] = _loc_3;
            _loc_3.category = _loc_4;
            if (_loc_4 is Date)
            {
                _loc_4 = new Date(_loc_4);
                _loc_4 = Dates.resetDateToMin(_loc_4, _cleanPeriod, _periodCount, _firstDateOfWeek);
                _loc_3.category = _loc_4;
                _loc_3.time = _loc_4.getTime();
            }
            var _loc_6:* = _charts.length;
            var _loc_7:Number = 0;
            while (_loc_7 < _loc_6)
            {
                
                _loc_8 = _charts[_loc_7];
                _loc_9 = _loc_8.id;
                _loc_3.addChart(_loc_9);
                _loc_10 = _loc_8.valueAxes;
                _loc_11 = _loc_10.length;
                _loc_12 = 0;
                while (_loc_12 < _loc_11)
                {
                    
                    _loc_13 = _loc_10[_loc_12].id;
                    _loc_3.addAxis(_loc_13, _loc_9);
                    _loc_14 = _charts[_loc_7].graphs;
                    _loc_15 = _loc_14.length;
                    _loc_16 = 0;
                    while (_loc_16 < _loc_15)
                    {
                        
                        _loc_17 = _loc_14[_loc_16];
                        _loc_18 = _loc_17.id;
                        if (_loc_17.valueAxis.id == _loc_13)
                        {
                            _loc_19 = _loc_3.addGraph(_loc_18, _loc_13, _loc_9);
                            _loc_19.serialDataItem = _loc_3;
                            _loc_19.graph = _loc_17;
                            if (!_loc_17.dataProvider)
                            {
                            }
                            if (!param2)
                            {
                                _loc_20 = _loc_17.fields;
                                for (_loc_21 in _loc_20)
                                {
                                    
                                    _loc_19.setValue(_loc_21, param1[_loc_20[_loc_21]]);
                                }
                                processFields(_loc_17, _loc_19, param1);
                            }
                            else if (_loc_17 == param2)
                            {
                                _loc_20 = _loc_17.fields;
                                for (_loc_21 in _loc_20)
                                {
                                    
                                    _loc_19.setValue(_loc_21, param1[_loc_20[_loc_21]]);
                                }
                                processFields(_loc_17, _loc_19, param1);
                            }
                            _loc_19.category = String(_loc_3.category);
                        }
                        _loc_16 = _loc_16 + 1;
                    }
                    _loc_12 = _loc_12 + 1;
                }
                _loc_7 = _loc_7 + 1;
            }
            return _loc_3;
        }// end function

        public function set seriesIdField(param1:String) : void
        {
            _seriesIdField = param1;
            return;
        }// end function

        public function parseSerialData(param1:IList, param2:Number = 1) : ArrayCollection
        {
            var _loc_4:AmCoordinateChart = null;
            var _loc_5:Array = null;
            var _loc_6:AmGraph = null;
            var _loc_7:Number = NaN;
            var _loc_8:Number = NaN;
            var _loc_10:Object = null;
            var _loc_11:Object = null;
            var _loc_12:SerialDataItem = null;
            var _loc_13:Number = NaN;
            var _loc_14:Number = NaN;
            _firstDateOfWeek = param2;
            _chartDataProvider = new ArrayCollection();
            var _loc_3:* = param1.length;
            if (!_seriesIdField)
            {
                _seriesIdField = _categoryField;
            }
            _lookupTable = new Object();
            if (_minPeriod)
            {
                _loc_10 = Dates.extractPeriod(_minPeriod);
                _cleanPeriod = _loc_10.period;
                _periodCount = _loc_10.count;
            }
            var _loc_9:uint = 0;
            while (_loc_9 < _loc_3)
            {
                
                _loc_11 = param1.getItemAt(_loc_9);
                _loc_12 = createSerialDataItem(_loc_11);
                _chartDataProvider.addItem(_loc_12);
                _loc_9 = _loc_9 + 1;
            }
            _loc_7 = _charts.length;
            _loc_8 = 0;
            while (_loc_8 < _loc_7)
            {
                
                _loc_4 = _charts[_loc_8];
                _loc_5 = _loc_4.graphs;
                _loc_13 = _loc_5.length;
                _loc_14 = 0;
                while (_loc_14 < _loc_13)
                {
                    
                    _loc_6 = _loc_5[_loc_14];
                    if (_loc_6.dataProvider)
                    {
                        parseGraphData(_loc_6);
                    }
                    _loc_14 = _loc_14 + 1;
                }
                _loc_8 = _loc_8 + 1;
            }
            return _chartDataProvider;
        }// end function

        public function parseGraphData(param1:AmGraph) : void
        {
            var _loc_4:Number = NaN;
            var _loc_7:Object = null;
            var _loc_8:String = null;
            var _loc_9:SerialDataItem = null;
            var _loc_10:String = null;
            var _loc_11:String = null;
            var _loc_12:Object = null;
            var _loc_13:String = null;
            var _loc_14:GraphDataItem = null;
            var _loc_2:* = IList(param1.dataProvider);
            var _loc_3:* = _loc_2.length;
            var _loc_5:* = param1.categoryField;
            if (!_loc_5)
            {
                _loc_5 = _categoryField;
            }
            var _loc_6:* = param1.seriesIdField;
            if (!_loc_6)
            {
                _loc_6 = _seriesIdField;
            }
            _loc_4 = 0;
            while (_loc_4 < _loc_3)
            {
                
                _loc_7 = _loc_2.getItemAt(_loc_4);
                _loc_8 = String(_loc_7[_loc_6]);
                _loc_9 = _lookupTable[_loc_8];
                _loc_10 = param1.chart.id;
                _loc_11 = param1.valueAxis.id;
                if (_loc_9)
                {
                    _loc_14 = _loc_9.charts[_loc_10].axes[_loc_11].graphs[param1.id];
                    _loc_14.serialDataItem = _loc_9;
                    _loc_14.graph = param1;
                    _loc_12 = param1.fields;
                    for (_loc_13 in _loc_12)
                    {
                        
                        _loc_14.setValue(_loc_13, Number(_loc_7[_loc_12[_loc_13]]));
                    }
                    processFields(param1, _loc_14, _loc_7);
                }
                else if (param1.combineSeries)
                {
                    _loc_9 = createSerialDataItem(_loc_7, param1);
                    _chartDataProvider.addItem(_loc_9);
                }
                _loc_4 = _loc_4 + 1;
            }
            return;
        }// end function

        public function set minPeriod(param1:String) : void
        {
            _minPeriod = param1;
            return;
        }// end function

        public function set charts(param1:Array) : void
        {
            _charts = param1;
            return;
        }// end function

        public function set categoryField(param1:String) : void
        {
            _categoryField = param1;
            return;
        }// end function

        public function parseXYData(param1:IList) : ArrayCollection
        {
            var _loc_4:SerialDataItem = null;
            var _loc_5:Object = null;
            var _loc_6:uint = 0;
            var _loc_7:uint = 0;
            var _loc_8:AmCoordinateChart = null;
            var _loc_9:String = null;
            var _loc_10:Array = null;
            var _loc_11:uint = 0;
            var _loc_12:uint = 0;
            var _loc_13:String = null;
            var _loc_14:Array = null;
            var _loc_15:uint = 0;
            var _loc_16:uint = 0;
            var _loc_17:AmGraph = null;
            var _loc_18:String = null;
            var _loc_19:GraphDataItem = null;
            var _loc_20:Object = null;
            var _loc_21:String = null;
            _chartDataProvider = new ArrayCollection();
            var _loc_2:* = param1.length;
            var _loc_3:Number = 0;
            while (_loc_3 < _loc_2)
            {
                
                _loc_4 = new SerialDataItem();
                _loc_5 = param1.getItemAt(_loc_3);
                _loc_6 = _charts.length;
                _loc_7 = 0;
                while (_loc_7 < _loc_6)
                {
                    
                    _loc_8 = _charts[_loc_7];
                    _loc_9 = _loc_8.id;
                    _loc_4.addChart(_loc_9);
                    _loc_10 = _loc_8.valueAxes;
                    _loc_11 = _loc_10.length;
                    _loc_12 = 0;
                    while (_loc_12 < _loc_11)
                    {
                        
                        _loc_13 = _loc_10[_loc_12].id;
                        _loc_4.addAxis(_loc_13, _loc_9);
                        _loc_14 = _charts[_loc_7].graphs;
                        _loc_15 = _loc_14.length;
                        _loc_16 = 0;
                        while (_loc_16 < _loc_15)
                        {
                            
                            _loc_17 = _loc_14[_loc_16];
                            _loc_18 = _loc_17.id;
                            if (_loc_17.xAxis.id != _loc_13)
                            {
                            }
                            if (_loc_17.yAxis.id == _loc_13)
                            {
                                _loc_19 = _loc_4.addGraph(_loc_18, _loc_13, _loc_9);
                                _loc_19.serialDataItem = _loc_4;
                                _loc_19.graph = _loc_17;
                                _loc_19.index = _loc_3;
                                _loc_20 = _loc_17.fields;
                                for (_loc_21 in _loc_20)
                                {
                                    
                                    _loc_19.setValue(_loc_21, Number(_loc_5[_loc_20[_loc_21]]));
                                }
                                processFields(_loc_17, _loc_19, _loc_5);
                            }
                            _loc_16 = _loc_16 + 1;
                        }
                        _loc_12 = _loc_12 + 1;
                    }
                    _loc_7 = _loc_7 + 1;
                }
                _chartDataProvider.addItem(_loc_4);
                _loc_3 = _loc_3 + 1;
            }
            return _chartDataProvider;
        }// end function

    }
}
